package Test;

public class StudentTest_teather {

	public static void main(String[] args) {
		/*	对象数组题目：
		   定义类Student，包含三个属性：学号number(int)，年级state(int)，成绩
		   score(int)。 创建20个学生对象，学号为1到20，年级和成绩都由随机数确定。
		    问题一：打印出3年级(state值为3）的学生信息。
		    问题二：使用冒泡排序按学生成绩排序，并遍历所有学生信息

		提示：
		     1) 生成随机数：Math.random()，返回值类型double; 
		     2) 四舍五入取整：Math.round(double d)，返回值类型long。*/
		//创建对象 创建20个太繁琐  使用for循环
		Student stu1 = new Student();
		Student stu2 = new Student();
		
		//Student 是引用类型数据  既然是数据类型 就可以创建数组 存储多个数据
		Student[] stu = new Student[20];
		
		for(int i = 0; i < stu.length; i++){
			//上面声明了数组的长度 ，没赋值；现在给每个元素赋值，
			//因为是引用数据类型，每个元素都是一个引用。引用可以调用Student类中的属性
			stu[i] = new Student();
			stu[i].number = i + 1;
			stu[i].state = (int)(Math.random()*6 + 1);
			stu[i].score = (int)(Math.random()*101);
		}
		//测试遍历
		for (int i = 0; i < stu.length; i++) {
			System.out.println("学号为：" + stu[i].number + "\t年级为：" + stu[i].state + "\t成绩为：" + stu[i].score + "\n");
		}
		
		System.out.println("-------------------------");
		
		//问题一：打印出3年级(state值为3）的学生信息。
		for (int i = 0; i < stu.length; i++) {
			if(stu[i].state == 3)
				System.out.println("学号为：" + stu[i].number + "\t年级为：" + stu[i].state + "\t成绩为：" + stu[i].score + "\n");
		}
		
		//问题二：使用冒泡排序按学生成绩排序，并遍历所有学生信息
		for (int i = 0; i < stu.length - 1; i++) {
			
			for (int j = 0; j < stu.length - 1 - i; j++) {
				//两两比较 交换位置
				if(stu[j].score > stu[j + 1].score){
					
					//比较的是成绩元素 但换的是成绩所在的数组 因为stu数组里面的元素 都是引用 所以用Student类型接收
					Student temp = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = temp;
				}
			}
		}
		
		System.out.println("-------------------------");
		
		//遍历
		
		for (int i = 0; i < stu.length; i++) {
			System.out.println("学号为：" + stu[i].number + "\t年级为：" + stu[i].state + "\t成绩为：" + stu[i].score + "\n");
		}

	}

}
